/*
 * @Description: 
 * @Version: 2.0
 * @Autor: liuwei
 * @Date: 2021-05-29 09:48:34
 * @LastEditors: liuwei
 * @LastEditTime: 2021-05-29 10:37:53
 */
class Watcher {
  constructor (vm, key, cb) {
    this.vm = vm
    // data中的属性名称
    this.key = key
    // 回调函数负责更新视图
    this.cb = cb

    // 把watcher对象记录到Dep类的静态属性target
    Dep.target = this
    // 触发get方法，在get方法中会调用addSub
    this.oldValue = vm[key]
    // 为了防止重复添加，要加Dep.target置为null
    Dep.target = null
  }
  // 当数据发生变化的时候更新视图
  update () {
    const newValue = this.vm[this.key]
    if (newValue === this.oldValue) return
    this.cb && this.cb(newValue)
  }
}
